package scg.utils.policies.granularity;


/**Esta implentación por defecto de la clase {@link GranularityPolicy} ofrece una granularidad 
 * de trabajo gruesa, es decir, retorna el mínimo entero que elevado al fanout del problema resulta en
 * el mínimo número de tareas con el que se alcanza a cubrir o mantener ocupados a todos los nodos del 
 * grid*/
public class DefaultGranularityPolicy extends GranularityPolicy{
	
	/**Constructor de la clase*/
	public DefaultGranularityPolicy(){
		this.fanout = 2;
	}
	
	public DefaultGranularityPolicy(int fanout){
		this.fanout = fanout;
	}
	
	
	/**@return retorna el mínimo entero que elevado al fanout del problema resulta en
	 * el mínimo número de tareas con el que se alcanza a cubrir o mantener ocupados a todos
	 * los nodos del grid*/
	public int getRecursionLevel() {
				
		int recLevel = 0;
		//es necesario asegurar que ningun nodo quede totalmente ocioso
		while (gridSize > Math.pow(fanout, recLevel))
			recLevel++;			
		System.out.println("Terminal Jobs Count: "+ Math.pow(fanout, recLevel));
		return recLevel;
	}

}
